package com.gitee.cashzhang27.test.sdk.bestsign.domain.request;

import cn.hutool.http.Method;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.AbstractBestSignRequest;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.BestSignRequest;
import com.gitee.cashzhang27.test.sdk.bestsign.domain.response.DistTemplateCreateContractResponse;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 上传模板变量创建合同
 *
 * @author Cash Zhang
 * @version v1.0
 * @since 2019/08/07 16:57
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class DistTemplateCreateContractRequest extends AbstractBestSignRequest implements
    BestSignRequest<DistTemplateCreateContractResponse> {

  /**
   * 合同创建者账号
   */
  private String account;
  /**
   * 模版编号
   * “开发者模版”页面模版保存后产生模版编号，可从页面上复制
   */
  private String tid;
  /**
   * 将模版变量中需要填充的内容（即变量值）在此提交。
   * 由于在编辑模版时已经拖放了位置、并且已经保存在上上签系统中，
   * 因此这里无需再提交位置参数，只需要传入变量名称与对应的值即可。
   * 模版变量可以在开发者模版管理页面获取。
   */
  private Map<String, String> templateValues;
  /**
   * 模版变量组名，每个变量可以设置归什么组，
   * 然后用这个组名来传递变量。
   * templateValues和groupValues不能全部为空。
   */
  private Map<String, String> groupValues;
  /**
   * 合同标题
   * 客户可以将自己的业务合同编号、或合同标题放此处
   */
  private String title;
  /**
   * 合同描述
   * 客户可以填写对合同的简要描述
   */
  private String description;
  /**
   * 合同能够签署的到期时间
   * 合同必须在指定的到期时间之前完成签署，
   * 一旦过期则此合同将无法被签署。
   * 格式为秒级的unix时间戳，
   * 如希望“2017/12/30 10:21:52”到期，
   * 则设置为“1514600512”；
   * 如果不填则默认为创建后加7天有效期。
   */
  private String expireTime;
  /**
   * 热存周期
   * 此参数是合同文件在热存储中保留的时间长度，单位为秒。
   * 保存在热存储中的合同数据，自合同结束时间算起，
   * 超过此此参数设定时长的合同文件，会转移到冷存储中。
   * 计算示例：如保存365天，则值为3600*24*365=31536000。
   * 参数可为空，为空时默认值为1年（31536000）
   * 取值范围为3600（1小时）~157680000（5年）
   */
  private String hotStoragePeriod;
  /**
   * 是否允许被上上签官网注册用户查看下载
   * 枚举值0/1，不带此参数则默认为1。
   * 当签署者到上上签官网注册实名认证，并登录上上签后，根据此参数控制：
   * 0-不显示在合同列表中，无法被查看、下载
   * 1-显示在合同列表中，可以被查看、下载
   */
  private String isAllowWebDownload;

  @Override
  public String getMethodName() {
    return "/dist/template/createContract/";
  }

  @Override
  public Method getMethodType() {
    return Method.POST;
  }

  @Override
  public Class<DistTemplateCreateContractResponse> getResponseClass() {
    return DistTemplateCreateContractResponse.class;
  }

}
